package br.com.senac.pi5.dao;

import br.com.senac.pi5.connection.ConexaoDB;
import br.com.senac.pi5.bean.Passageiro;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class PassageiroDao {

    static PreparedStatement ps;
    // a conexão com o banco de dados
    private final Connection conexao;

    public PassageiroDao() throws SQLException {
        this.conexao = new ConexaoDB().getConexao();
    }

    public void adiciona(Passageiro passageiro) throws SQLException {

        // prepara a conexão
        String sql = "insert into passageiro(nome , sobrenome , sexo , rg , cpf , endereco , bairro , dt_nasc , cidade , estado , cep , tel , email , senha) values ( ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ?)";

        try (PreparedStatement stmt = conexao.prepareStatement(sql)) {

            stmt.setString(1, passageiro.getNome());
            stmt.setString(2, passageiro.getSobrenome());
            stmt.setString(3, passageiro.getSexo());
            stmt.setString(4, passageiro.getRg());
            stmt.setString(5, passageiro.getCpf());
            stmt.setString(6, passageiro.getEndereco());
            stmt.setString(7, passageiro.getBairro());
            stmt.setString(8, passageiro.getDt_nasc());
            stmt.setString(9, passageiro.getCidade());
            stmt.setString(10, passageiro.getEstado());
            stmt.setString(11, passageiro.getCep());
            stmt.setString(12, passageiro.getTel());
            stmt.setString(13, passageiro.getEmail());
            stmt.setString(14, passageiro.getSenha());

            //Executa o código SQL
            stmt.execute();
            stmt.close();
        }
    }

    public boolean validaCpfExistente(String cpf) throws SQLException {

        boolean resultado = false;
        String sql = "select * from passageiro where cpf = '" + cpf + "'";

        PreparedStatement preparedStatement = conexao.prepareStatement(sql);
        ResultSet rs = preparedStatement.executeQuery(sql);

        while (rs.next()) {
            resultado = true;
        }

        return resultado;
    }

    public boolean validaEmailExistente(String email) throws SQLException {

        boolean resultado = false;
        String sql = "select * from passageiro where email = '" + email + "'";

        PreparedStatement preparedStatement = conexao.prepareStatement(sql);
        ResultSet rs = preparedStatement.executeQuery(sql);

        while (rs.next()) {
            resultado = true;
        }

        return resultado;
    }

    public Passageiro autentica(String email, String senha) throws SQLException {
        // prepara a conexão
        String sql = "select * from passageiro where email = '" + email + "' and senha = '" + senha + "' and ROWNUM <= 1";

        PreparedStatement preparedStatement = conexao.prepareStatement(sql);
        ResultSet rs = preparedStatement.executeQuery(sql);

        Passageiro passageiro = new Passageiro();

        while (rs.next()) {
            passageiro.setCodigo(rs.getString("CODIGO"));
            passageiro.setNome(rs.getString("NOME"));
            passageiro.setSobrenome(rs.getString("SOBRENOME"));
            passageiro.setSexo(rs.getString("SEXO"));
            passageiro.setRg(rs.getString("RG"));
            passageiro.setCpf(rs.getString("CPF"));
            passageiro.setEndereco(rs.getString("ENDERECO"));
            passageiro.setBairro(rs.getString("BAIRRO"));
            passageiro.setDt_nasc(rs.getString("DT_NASC"));
            passageiro.setCidade(rs.getString("CIDADE"));
            passageiro.setEstado(rs.getString("ESTADO"));
            passageiro.setCep(rs.getString("CEP"));
            passageiro.setTel(rs.getString("TEL"));
            passageiro.setEmail(rs.getString("EMAIL"));
            passageiro.setSenha(rs.getString("SENHA"));
        }
        return passageiro;
    }

    public Passageiro buscaPassageito(String codigo) throws SQLException {
        // prepara a conexão
        String sql = "select * from passageiro where codigo = '" + codigo + "'";

        PreparedStatement preparedStatement = conexao.prepareStatement(sql);
        ResultSet rs = preparedStatement.executeQuery(sql);

        Passageiro passageiro = new Passageiro();

        while (rs.next()) {
            passageiro.setCodigo(rs.getString("CODIGO"));
            passageiro.setNome(rs.getString("NOME"));
            passageiro.setSobrenome(rs.getString("SOBRENOME"));
            passageiro.setSexo(rs.getString("SEXO"));
            passageiro.setRg(rs.getString("RG"));
            passageiro.setCpf(rs.getString("CPF"));
            passageiro.setEndereco(rs.getString("ENDERECO"));
            passageiro.setBairro(rs.getString("BAIRRO"));
            passageiro.setDt_nasc(rs.getString("DT_NASC"));
            passageiro.setCidade(rs.getString("CIDADE"));
            passageiro.setEstado(rs.getString("ESTADO"));
            passageiro.setCep(rs.getString("CEP"));
            passageiro.setTel(rs.getString("TEL"));
            passageiro.setEmail(rs.getString("EMAIL"));
            passageiro.setSenha(rs.getString("SENHA"));
        }
        return passageiro;
    }

    public void altera(Passageiro passageiro) throws SQLException {
        String sql = "update passageiro set nome = ? , sobrenome = ? , sexo = ? , rg = ? , cpf = ? , endereco = ? , bairro = ? , dt_nasc = ? , cidade = ? , estado = ? , cep = ? , tel = ? , email = ? , senha = ? where codigo = ?";

        try (PreparedStatement stmt = this.conexao.prepareStatement(sql)) {
            stmt.setString(1, passageiro.getNome());
            stmt.setString(2, passageiro.getSobrenome());
            stmt.setString(3, passageiro.getSexo());
            stmt.setString(4, passageiro.getRg());
            stmt.setString(5, passageiro.getCpf());
            stmt.setString(6, passageiro.getEndereco());
            stmt.setString(7, passageiro.getBairro());
            stmt.setString(8, passageiro.getDt_nasc());
            stmt.setString(9, passageiro.getCidade());
            stmt.setString(10, passageiro.getEstado());
            stmt.setString(11, passageiro.getCep());
            stmt.setString(12, passageiro.getTel());
            stmt.setString(13, passageiro.getEmail());
            stmt.setString(14, passageiro.getSenha());
            stmt.setString(15, passageiro.getCodigo());

            //executar a query
            stmt.execute();
            stmt.close();
        }
    }
}
